home *** CD-ROM | disk | FTP | other *** search
- /* File "store.cpp", Light Sockets - Copyright (C) Matt Slot, 1996 */
- /* Consolidated data storage class */
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* Include Files */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "stdtypes.h"
-
- #include "store.h"
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- c_store::c_store(UInt32 elem_size) {
-
- size = elem_size;
- count = 0;
- data_ptr = 0;
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- c_store::~c_store() {
- if (data_ptr) free(data_ptr);
- data_ptr = 0;
- count = 0;
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- #pragma mark -
-
- SInt32 c_store::insert_elem(Byte8 *new_data, UInt32 insert_before) {
- Byte8 *new_ptr, *temp_ptr;
-
- new_ptr = (Byte8 *) malloc(size * (count+1));
- if (! new_ptr) return(-1);
-
- if (count) {
- if (insert_before > count) insert_before = count;
- else if (insert_before < 0) insert_before = 0;
-
- memcpy(new_ptr, data_ptr, insert_before * size);
- memcpy(new_ptr + (insert_before * size), new_data, size);
- memcpy(new_ptr + ((insert_before+1) * size),
- data_ptr + (insert_before * size),
- (count - insert_before) * size);
- }
- else memcpy(new_ptr, new_data, size);
-
- temp_ptr = data_ptr;
- data_ptr = new_ptr;
- count++;
- if (temp_ptr) free(temp_ptr);
-
- return(0);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- SInt32 c_store::remove_elem(UInt32 index) {
- Byte8 *new_ptr, *temp_ptr;
-
- if (count>1) {
- new_ptr = (Byte8 *) malloc(size * (count-1));
- if (! new_ptr) return(-1);
-
- if (index >= count) index = count-1;
- else if (index < 0) index = 0;
-
- memcpy(new_ptr, data_ptr, index * size);
- memcpy(new_ptr + (index * size), data_ptr + ((index+1) * size),
- (count - index - 1) * size);
- }
- else new_ptr = 0;
-
- count--;
- temp_ptr = data_ptr;
- data_ptr = new_ptr;
- if (temp_ptr) free(temp_ptr);
-
- return(0);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- SInt32 c_store::remove_all() {
- if (data_ptr) free(data_ptr);
- data_ptr = 0;
- count = 0;
-
- return(0);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- Byte8 * c_store::get_nth_elem(UInt32 index) {
-
- if (index < 0) return(0);
- if (index >= count) return(0);
- return(data_ptr + (index * size));
- }
-
-